The present invention generally relates to cloud services, and more particularly, to optimizing the deployment of virtual resources and automating post-deployment actions in a cloud environment.
Cloud providers provide users with virtual resources as part of virtual machines. Users submit requests (e.g., as part of a service-level agreement (SLA)) for virtual machines having a particular configuration (e.g., minimum virtual CPU resources, memory resources, storage resources, etc.) Users can also customize each virtual image for their individual purpose at deploy time or later after being deployed. An example of such customization may be the installation of additional services or middleware. Building a virtual machine with a particular configuration takes time to deploy. The perceived deployment time for virtual machines can be a significant differentiator between cloud providers, but there are technical limitations as to how quickly a deployment can occur.
Typically, it is important for system and management stability that the user not be able to adjust their SLA (e.g., the virtual resources requested) while the virtual machine is running. Thus, it is typically critical that the user select an appropriate resource reservation at deploy time. However redeployment often occurs to adjust the amount of virtual resources for the user. For example, redeployment of a virtual machine occurs when a user initially requests too few or too many resources. This may happen since public cloud users often are motivated by pay-as-you-go cost structure to minimize resource usage and private cloud users are motivated by trying to conserve a scarce public resource.
Further, resource fragmentation can occurs when a common problem with a VM propagates across the deployment of multiple similar VMs. The fragmentation problem can occur regardless of the natural lifetime of a VM, but fragmentation is made worse when requested resources are inappropriate for the intended purpose of the VM. The stability of the entire system of a cloud provider can be compromised when a VM is redeployed with a change in resources. If fragmentation is not immediately apparent, then allocation of a limited resource can lead to fractions of the global resource bucket being distributed amongst many. When a resource fraction is returned, it may not be appropriately sized for future resource requests. For example, a returned resource may possibly be too small, and unusable for future applications. Alternatively, a returned resource may be too large, thereby leading to potentially more fragmentation when a small fraction is leftover after being used.
Memory and hard drives have partially solved this by defragmentation techniques to physically relocate used resources in a way to make the usage continuous. While defragmentation may be possible for a single resource, cloud environments include multiple resource types (e.g., minimum virtual CPU resources, memory resources, storage resources, etc.), each being a variable at deploy time. This multi-commodity problem in cloud environments can make resource fragmentation exponentially worse and can lead to severe resource underutilization and even can lead to the point of cloud instability. This instability can be reached when there are sufficient resources to deploy the requested VM, but none of those resources are available on the same physical machine.
Cloud environments, e.g., data centers, utilize IT professionals to manage their VMs. For example, IT professionals keep software up to date and protected from viruses, ensuring a VM maintains the correct user accounts, are time synchronized, performing OS and SW key management, ensuring communication services up and running, etc. With traditional data centers, adding a new server or making changes is limited to the availability of IT professionals. When moving to the cloud, the creation of new servers is simplified and resources potentially are better utilized, but many management tasks for VMs are either no longer performed or again limited by IT professional's time. For some businesses, neither is acceptable and ultimately this restricts their continued business growth.
Managed Services seeks to automate as many of these tasks as possible to reduce the number of IT professionals required. With automation, detailed records and auditing can be performed to prove a level of compliance too. Generation of these automated tasks is a laborious job and can be a one-size-fits-none situation. For example, a software package is added to all VMs, but once receiving the VM, many users then modify and/or remove the package. Updating of the automated tasks may only occur when a user notifies an IT professional or administrator of the update.